#ifndef C_MAINWINDOW_H
#define C_MAINWINDOW_H

#include <QtGui/QMainWindow>
#include <QLabel>

#include "../network/Network.h"

#include "Controller.h"

//#define NO_CONTROLLER

namespace Ui
{
	class MainWindowClass;
}

/**
 * @brief Zbiór klas odnoszących się jedynie do klienta.
 *
 * Zawiera min. @ref Client::MainWindow "kontroler" oraz @ref Client::Model "model".
 **/
namespace Client {

/**
 * @brief Kontroler klienta.
 *
 * Odpowiada za tworzenie GUI, przechwytuje komunikaty od użytkownika
 * (zgłaszane poprzez GUI). Tworzy i nadzoruje działanie kontrolera sieciowego
 * przechwytując odebrane pakiety, a następnie wykonuje odpowiednie operacje
 * na modelu klienta (za którego utworzenie także jest odpowiedzialny).
 **/
class MainWindow : public QMainWindow
{
	Q_OBJECT

public:
	MainWindow(QWidget *parent = 0);
	~MainWindow();

protected:
	void closeEvent(QCloseEvent *event);

private:
	Ui::MainWindowClass *ui;

	// dodatkowe kontrolki
	QLabel * lblServerStatus;

	//Network::Controller controller;
	//Network::RemoteClient * mainServer;
#ifndef NO_CONTROLLER
	Controller controller;
#endif

	/**
	 * Funkcja sprawdzająca, czy połączenie z serwerem jest aktywne,
	 * a jesli nie jest to wyświetla odpowiednie okienko z komunikatem.
	 **/
	bool checkConnection();

private slots:
	void on_treeSearch_doubleClicked(QModelIndex index);
	void on_btnAddSharedFile_clicked();
	void on_btnStartSearch_clicked();

	void on_btnAbout_clicked(bool checked);
	void on_btnConfig_clicked(bool checked);
	void on_btnSearch_clicked(bool checked);
	void on_btnUploads_clicked(bool checked);
	void on_btnDownloaded_clicked(bool checked);
	void on_btnTransfers_clicked(bool checked);

	void onControllerServerState();
	void onUpdateSearchResult();

};

} // namespace Client

#endif // C_MAINWINDOW_H
